const jwt = require('jsonwebtoken');

const auth = (req, res, next) => {
  try {
    // 从 Authorization 头获取 token
    const authHeader = req.header('Authorization');
    
    if (!authHeader || !authHeader.startsWith('Bearer ')) {
      return res.status(401).json({ message: '无访问令牌，认证失败' });
    }

    const token = authHeader.replace('Bearer ', '');
    
    if (!token) {
      return res.status(401).json({ message: '无访问令牌，认证失败' });
    }

    // 验证 token
    const decoded = jwt.verify(token, process.env.JWT_SECRET || 'your-secret-key');
    
    console.log('解码的token内容:', decoded); // 调试信息
    
    // 统一用户ID字段 - 优先使用 id，如果没有则使用 userId
    const userId = decoded.id || decoded.userId;
    
    if (!userId) {
      return res.status(401).json({ message: '令牌中缺少用户ID' });
    }

    // 设置用户信息
    req.user = {
      userId: userId,
      username: decoded.username || decoded.phone, // 兼容不同字段
      phone: decoded.phone
    };
    
    console.log('认证成功，用户ID:', req.user.userId);
    
    next();
  } catch (error) {
    console.error('认证中间件错误:', error);
    
    if (error.name === 'TokenExpiredError') {
      return res.status(401).json({ message: '令牌已过期，请重新登录' });
    }
    
    if (error.name === 'JsonWebTokenError') {
      return res.status(401).json({ message: '令牌无效' });
    }
    
    res.status(401).json({ message: '认证失败' });
  }
};

module.exports = auth;